/*
    98. 验证二叉搜索树
    对于搜索二叉树，他的中序遍历一定是严格单调递增的
    只需要中序遍历加判断即可
 */

public class IsValidBST {

    static long s = Long.MIN_VALUE;
    public static void main(String[] args) {
        TreeNode tree1 = new TreeNode(0);
        System.out.println(isValidBST(tree1));
    }

    public static boolean isValidBST(TreeNode root) {

        return isbst(root);

//        Stack<TreeNode> stack = new Stack<>();
//        int temp = Integer.MAX_VALUE;
//        int count = 0;
//        while (!stack.isEmpty() || root != null) {
//            if (root != null) {
//                stack.push(root);
//                root = root.left;
//            } else {
//                TreeNode pop = stack.pop();
//                if (count == 0) {
//                    temp = pop.val;
//                } else if (pop.val <= temp) {
//                    return false;
//                }
//                count++;
//                temp = pop.val;
//                root = pop.right;
//            }
//        }
//        return true;
    }

    public static boolean isbst(TreeNode root) {
        if (root == null) return true;
        boolean a = isbst(root.left);
        if (!a) {
            return false;
        }
        if (root.val <= s) {
            return false;
        } else {
            s = root.val;
        }
        return isbst(root.right);
    }
}
